/*使用工具类的实现：
                1.获取系统时间
                2. 判断文件是否存在
                3. 获取文件所在的路劲
                4。 创建目录
*/
#pragma once
#include <iostream>
#include <ctime>
#include <unistd.h>
#include <sys/stat.h>

namespace log
{   
    namespace util
    {
        class Data
        {
        public:
            static size_t getTime()
            {
                return (size_t)time(nullptr);
            }

        };

        class File
        {
            public:
                static bool exists(const std::string& pathname)
                {
                    //access 系统调用 int access(const char* pathname,int mode) 其中mode 有F_OK 测试文件是否存在R_OK测试读权限 W_OK 测试写权限X_OK测试执行权限
                    //注意 这个函数跨平台性不太好  可以用stat来取代 ，stat这个函数具有通用性
                   // return (access(pathname.c_str(),F_OK) == 0);
                
                    struct stat st;
                    if(stat(pathname.c_str(),&st) < 0) {
                        return false;
                    }

                    return true;
                }
                static std::string path(const std::string& pathname)
                {
                    //./a.txt
                    size_t pos = pathname.find_last_of("/\\");
                    if(pos == std::string::npos)
                    {
                        return ".";
                    }

                    return pathname.substr(0,pos+1); // 将/带上
                }

                static void createDirector(const std::string& pathname)
                {
                    //./abc/bcd/cde
                    size_t pos = 0;
                    size_t idx = 0;
                    while(idx < pathname.size())
                    {
                        pos = pathname.find_first_of("/\\",idx);// 从idx开始查找
                        if(pos == std::string::npos)
                        {
                            mkdir(pathname.c_str(),0777);
                            break;
                        }
                        // pos + 1 是将/带上
                        std::string parent_dir = pathname.substr(0,pos+1);
                        if(exists(parent_dir) == true) {
                            idx = pos+1;
                            continue;
                        }

                        mkdir(parent_dir.c_str(),0777);
                        idx = pos +1;
                    }
                }
        };
    }
}
